home *** CD-ROM | disk | FTP | other *** search
/ Ray Dream Studio / Ray Dream Studio (CDRAYD1) (Ray Dream) (1995).iso / DREAMSDK.WIN / INCLUDE / RDARRAY.H < prev    next >
C/C++ Source or Header  |  1995-06-21  |  2KB  |  74 lines

  1. /* $Id: rdarray.h 1.1 1994/10/29 00:41:45 Yann Exp $ */
  2. /*$RDGNU$*/
  3. #ifndef __RDARRAY__
  4. #define __RDARRAY__
  5.  
  6. #ifndef __MTYPES__
  7. #include "Mtypes.h"
  8. #endif
  9.  
  10. class RDArrayIterator;
  11. typedef long RDArrayIndex;
  12.  
  13. class RDArray {
  14. private:    
  15.     char* fData;
  16.     long fSize;
  17.     long fAllocSize;
  18.     short fElementSize;
  19.     short fAlignedSize;
  20. public:
  21.     enum {kUnusedIndex=0,kBlockSize=10,kAlign=2};    // Align on words
  22.  
  23.     RDArray(short    elementSize); 
  24.     ~RDArray();
  25.     RDArray* Clone();
  26.  
  27.     void* Next(void *current) const {return ((char *)current)+fAlignedSize;}
  28.     void* Prev(void *current) const {return ((char *)current)-fAlignedSize;}
  29.     long GetSize() const {return(fSize);}
  30.     void FreeAll(void    (*howTo)(void*) );
  31.     void FreeElement(void    (*howTo)(void*) , long i);
  32.     void Delete(long i);  //Does not free FHObj
  33.     void DeleteAll();
  34.     long GetEqualItemNo(void* item);
  35.     void* First() const {return fData;}
  36.     void* Last() const;
  37.     void InsertFirst(void* item);
  38.     void InsertLast(void* item) {if (fSize==fAllocSize) MakeDataLarger();AtPut(++fSize,item);}
  39.     void AtPut(long index, void* item); //Does not free old item
  40.     void* At(long i) const {return fData+(i-1)*fAlignedSize;}
  41.     void* AtCheckedOrZero(long i) const;
  42.     void InsertBefore(long i, void* item);
  43.     void InsertAfter(long i, void* item);
  44.     void CopyItems(RDArray* fromList, long firstIndex, long nbItems, long insertIndex);
  45.     void Each(void(*DoToItem)(void*, void*), void* staticLink);
  46.     void* FirstThat(unsigned char(*TestItem)(void*, void*) , void* staticLink);
  47.  
  48.     void PreAllocate(long nbElements, Boolean setSize=false);
  49.     void FreeData(void    (*howTo)(void*) ); // same as FreeAll()
  50.     long GetIdentityItemNo(void* item); // same as GetEqualItemNo()
  51.     void DeleteElementsAt(long i, long nb);
  52.  
  53. private:
  54.     void MakeDataLarger();    
  55.     friend class RDArrayIterator;
  56.     };
  57.  
  58. class RDArrayIterator {
  59. public:
  60.     RDArrayIterator(RDArray *array) {fArray=array;fIndex=1;fCurrent=fArray->fData;}
  61.     void Reset() {fIndex=1;fCurrent=fArray->fData;}
  62.     void* First() {fIndex=1;return fCurrent=fArray->fData;}
  63.     void* Next() {fIndex++;return fCurrent+=fArray->fAlignedSize;}
  64.     Boolean More() {return (fIndex<=fArray->fSize);}
  65.     long GetIndex() {return fIndex;}
  66. private:
  67.     RDArray *fArray;
  68.     char *fCurrent;
  69.     long fIndex;
  70.     };
  71.  
  72.  
  73. #endif
  74.